<?php

namespace App\Http\Controllers;
use App\Http\Common\MyUtils;
use App\Http\Common\WeChat;
use App\Models\QuestionType;
use App\User;
use EasyWeChat\Factory;
use Illuminate\Support\Facades\Session;

/**
 * 用户的控制器
 * Class UserController
 * @package App\Http\Controllers
 */
class UserController extends BaseController
{
    public function __construct()
    {
        parent::__construct();
        $this->model=new User($this->request->all());
    }
    /**
     * 获得用户信息
     */
    public function info(){
        $user = Session::get('user');
        if ($user){
            $roles = $user->roles;
            if ($roles){
                $user->role = $roles[0];
                unset($user->roles);
                $user->role->permissions = $user->role->perms;
                unset($user->role->perms);
            }
        }
        return MyUtils::df($user,1);
    }

    /**
     * 当前用户是否鉴权
     */
    public function ifOauthWechatUser(){
        $wechat = new WeChat();
        $app = Factory::officialAccount($wechat->config);
        $oauth = $app->oauth;
        // 未登录,让用户授权
        if (empty(Session::get('wechat_user'))) {
            Session::put('target_url',env('SERVER_ADMIN_ADDRESS').'/questions');
            $url = $oauth->redirect(env('SERVER_ADMIN_ADDRESS').'/questions');// 重新定位到微信端的鉴权页面
            return MyUtils::df($url->getTargetUrl(),-5);// code 为 -2 表示重定向 到 $url
        }
        // 已经登录过，表示已经授权了，用户信息传递过去
        $user = $this->getOauthWechatUser($oauth);
        // 需要回答的题目
        $questionTypes = QuestionType::all()->toArray();
        $data['user'] = $user;
        $data['questionTypes'] = $questionTypes;// 得到的提问的所有数据
        return MyUtils::df($data,1);
    }

    /**
     * 获取已经授权用户,得到用户的跳转路径
     */
    public function oauthWechatUser(){
        $wechat = new WeChat();
        $app = Factory::officialAccount($wechat->config);
        $oauth = $app->oauth;
        // 获取 OAuth 授权结果用户信息
        $user = $oauth->user();
        Session::put('wechat_user',$user->toArray());
        $targetUrl = empty(Session::get('target_url')) ? '/' : Session::get('target_url');
        // 前端跳转到 $targetUrl
        return MyUtils::df($targetUrl,-5);// code 为 -2 表示重定向 到 $url
    }

    /**
     * 得到当前授权的用户
     * @param $oauth
     * @return mixed
     */
    private function getOauthWechatUser($oauth){
        $user = $oauth->user;
        // $user 可以用的方法:
        $user->getId();  // 对应微信的 OPENID
        $user->getNickname(); // 对应微信的 nickname
        $user->getName(); // 对应微信的 nickname
        $user->getAvatar(); // 头像网址
        $user->getOriginal(); // 原始API返回的结果
        $user->getToken(); // access_token， 比如用于地址共享时使用
        return $user;
    }

}
